import axios from "axios";
import router from "../router";
import elementUI from "element-ui";
import nprogress from "nprogress"

// console.log(axios.CancelToken);

let CancelToken = axios.CancelToken; //获取CancelToken方法

let http = axios.create({
  //会把传入的对象当初axios的prototype
  baseURL: "/api", //配置默认的地址
  withCredentials: true, //将会默认携带认证给后端
  timeout: 1000 * 10, //请求超时设置，如果超过了10s，就会进入reject
});

//请求拦截器
http.interceptors.request.use(function (config) {
  nprogress.start()
  //请求数据的时候需要携带token
  //但是登录 获取验证码 校验验证码不需要token
  let rowPaths = ["/users/login", "/users/getCaptcha", "/users/verifyCaptcha"];
  // config.url 可以获取当前被拦截的请求的请求地址
  if (rowPaths.includes(config.url)) {
    return config; //放行
  } else {
    //从本地存储把token取出来，携带给其它请求
    let token = localStorage.getItem("qf-token") || "";
    // console.log(token);
    config.headers["authorization"] = token;
    return config;
  }
  // console.log(config);
}); //请求拦截器，可以拦截到所有的请求，添加我们所需要的逻辑

// console.log(elementUI);

//响应拦截器
http.interceptors.response.use(function (config) {
  nprogress.done()
  //当响应回来的状态码 为10022 或 10044的时候，需要跳转到登录页，清除token
  // console.log(config);
  if (config.data.code === "10022" || config.data.code === "1004") {
    router.push("/login");
    localStorage.removeItem("qf-token");
    //刷新页面
    location.reload()
    //提示用户登录过期
    elementUI.Message.error("登录过期，请重新登录");
  }

  if (config.data.code === "10026") {
    elementUI.Message.error("没有权限")
    return
  }
  
  return config;
});

export {
  http as default, //默认导出
  CancelToken,
};
